package com.lam.common.utils;

import java.util.List;

import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.lam.common.exception.ParameterErrorException;

/**
 * mybatis-plus 表工具
 * @author lamyz
 *
 */
public class TableInfoUtil {
	
	/**
     * 根据Java属性名，使用驼峰转下划线规则，获取对应的数据库字段名称
     * @param propName
     * @return
     */
	public static String getColumn(String propName) {
		return getColumn(null, propName);
	}
		
	
	/**
     * 根据实体类和Java属性名，获取对应的数据库字段名称，entityClass为空，则使用驼峰转下划线规则转换
     * @param entityClass
     * @param propName
     * @return
     */
    public static String getColumn(Class<?> entityClass, String propName) {
    	
    	if(entityClass == null) {
    		return StringUtils.toUnderScoreCase(propName);
    	}
    	
    	TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
    	if(tableInfo == null) {
    		return StringUtils.toUnderScoreCase(propName);
    	}
    	
    	if(StringUtils.equals(tableInfo.getKeyProperty(), propName)) {
    		return tableInfo.getKeyColumn();
    	}
    	List<TableFieldInfo> fieldList = tableInfo.getFieldList();
    	for (TableFieldInfo fieldInfo : fieldList) {
    		if(StringUtils.equals(fieldInfo.getProperty(), propName)) {
    			return fieldInfo.getColumn();
    		}
		}
    	
		throw new ParameterErrorException("不存在的排序字段！");
    }

}
